import router from './router'
import store from './store'

import defaulConfig from '@/config'
import getPageTitle from '@/util/appUtil'
import { getAdminToken } from '@/util/authUtil'

import NProgress from 'nprogress'
// 必须引入，才能在浏览器顶部看到进度条。
import 'nprogress/nprogress.css'

// 默认情况下，浏览器右上角会有一个不停转圈的 loading 图标。
// NProgress.configure()
// showSpinner: false。这样就可以不显示浏览器右上角的不停转圈的 loading 图标。
// minimum: 0.8。进度条的最小百分比。默认 0.08。
// trickle: false。默认值 true。默认会不停的一点一点的增加进度条。
// 设置为 false，则会停止在初始进度，等总时间一到，快速结束。
// trickleRate: 0.02。进度条每次增加多少，实际是最大这么多（2%），最小可能近乎0。
// speed: 500。默认值 200。没搞懂到底什么用。看起来像是：当进度条的值增加到 1（100%） 时，此时进度条还没有满，那么剩余的会在这个时间后一次填满（也是持续填充，不是瞬间填充）。
NProgress.configure({
  showSpinner: false,
  // minimum: 0.08,
  // trickle: true,
  // trickleRate: 0.02,
  // trickleSpeed: 800,
  // speed: 200,
})


router.beforeEach(async (to, from, next) => {
  NProgress.start()

  console.log("/src/permission.js beforeEach to", to)
  console.log("/src/permission.js beforeEach from", from)

  document.title = getPageTitle(to.meta.title)

  var isLogined = false;

  const adminToken = getAdminToken()

  // 已经登录
  if (adminToken) {
    if (to.path == defaulConfig.admin['login-path']) {
      next({ path: '/'})
      NProgress.done()
    } else {
      // 根据角色进行限制
      // store.getters.roles 是一个函数，这里直接使用，那就是调用后再 .length 了吧。
      const hasRoles = store.getters.roles && store.getters.roles.length > 0
      if (hasRoles) {
        next()
      } else {
        // 没有角色，调用接口来查找验证。
        const { roles } = await store.dispatch("admin/getInfo")
        //
      }
    }
  } else {
    // 尚未登录
    // 如果要访问白名单URL，则直接显示。
    if (defaulConfig.admin.whitePathList.indexOf(to.path) !== -1) {
      next()
    } else {
      // other pages that do not have permission to access are redirected to the login page.
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }

  // setTimeout(() => {
  //   console.log("/src/permission.js beforeEach NProgress.isStarted", NProgress.isStarted())
  //
  //   setTimeout(() => {
  //     next()
  //     NProgress.done()
  //   }, 1000)
  // }, 3000)

})

router.afterEach(() => {
  console.log("/src/permission.js afterEach arguments", arguments)
  console.log("/src/permission.js afterEach NProgress.isStarted", NProgress.isStarted())

  // finish progress bar
  if (NProgress.isStarted()) {
    NProgress.done()
  }
})
